<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
</head>
<style></style>

<body style="background-color: #000">
    <div style="
        color: orange;
        margin: 0 auto;
        width: px;
        height: 200px;
        line-height: 200px;
        text-align: center;
        font-weight: 1000;
        font-size: 70px;
      ">
        函数的改变
    </div>
    <script>
        /*
          函数参数的默认值
          rest 参数
          严格模式
          name 属性
          箭头函数
          尾调用优化
          函数参数的尾逗号
          Function.prototype.toString()
          catch 命令的参数省略
          函数参数的默认值
          */
        /* ******************************************************************************************************************************************************* */

        /* 函数参数的默认值
          
   rest 参数
  严格模式
  name 属性
  箭头函数
  尾调用优化
  函数参数的尾逗号
  Function.prototype.toString()
  catch 命令的参数省略
  函数参数的默认值 */
        function add(...values) {
            //注意，rest 参数之后不能再有其他参数（即只能是最后一个参数），否则会报错。
            let sum = 0;
            /* 记住，for in遍历的是数组的索引（即键名），而for of遍历的是数组元素值。 */
            for (var val of values) {
                sum += val;

            }
            // values.forEach(element => {
            //     sum += element
            //     console.log(sum);
            // });

            // values.map((val) => {
            //     sum += val
            // })

            return sum;
        }
        let c = [1, 2, 3, 4, 5, 6, 7]
        console.log(add(...c));
        add(2, 5, 3) // 10
        /* ***************************************************************************************************************************************** */
        //name属性返回函数的函数名
        const functis = function a() {
            return console.log('返回函数名');
        }
        console.log(functis.name);
        /* ************************************************************************************************************************************************ */
        //箭头函数
        var a = c => 11
        console.log(a());//11
        var sun = () => { return 8 }
        // var sun = v => { return v }如果箭头函数的代码块部分多于一条语句，就要使用大括号将它们括起来，并且使用return语句返回。
        console.log(sun(4));
        var a = () => ({ id: 8, name: 'ztt' })
        console.log(a());//由于大括号被解释为代码块，所以如果箭头函数直接返回一个对象，必须在对象外面加上括号，否则会报错。
        /* ****************************************************************************** */
        //箭头函数简写
        let aa = [1, 2, 3, 4]
        let b = aa.map((v, vv, vvv) => v * 2)
        console.log(b);
    </script>
</body>

</html>